=begin

This file is part of the RSIF project, http://rsif.googlecode.com

Copyright (c) 2009-2009 Roberto Dario Seminara <robertodarioseminara@gmail.com>

rsif is free software: you can redistribute it and/or modify
it under the terms of the gnu general public license as published by
the free software foundation, either version 3 of the license, or
(at your option) any later version.

rsif is distributed in the hope that it will be useful,
but without any warranty; without even the implied warranty of
merchantability or fitness for a particular purpose.  see the
gnu general public license for more details.

you should have received a copy of the gnu general public license
along with rsif.  if not, see <http://www.gnu.org/licenses/>.
=end

require "modules/cmd_handler"

module Rsif
module Core


class Context
	def cmd_dispatcher
		unless @cmd_dispatcher
			@cmd_dispatcher = Rsif::Core::CommandDispatcher.new
		end		
		@cmd_dispatcher
	end
end



class CommandDispatcher
	include Rsif::Core::Logging
	attr_writer	:framework

	def initialize
		update_handlers

	end

	def run_command( command_name, *args )
		logger.debug "Corriendo comando #{command_name} argumentos #{args.join(",")}"

		@subhandlers.each do |handler|

			logger.debug "analysing handler #{handler}"

			if handler.respond_to? "cmd_#{command_name}"
				return handler.send("cmd_#{command_name}",*args)
			end
		end

		logger.error "Handler not found por command #{command_name}"
	end


	def update_handlers
		logger.debug "Updating command handlers"

		@subhandlers = Array.new
		Rsif::Core::Modules::CmdHandler.subclasses.each do |klas|
			logger.debug "Creating class #{klas}"
			@subhandlers << klas.create
		end
	end

	def framework=(f)
		@framework = f
		@subhandlers.each do |handler|
			handler.framework = f
		end		
	end

end

end
end

